home *** CD-ROM | disk | FTP | other *** search
/ Resource for Source: C/C++ / Resource for Source - C-C++.iso / codelib1 / v_01_05 / 1n05025a < prev    next >
Text File  |  1995-11-01  |  2KB  |  50 lines

  1.  
  2. .***************** PROGRAM SECTION START ******************
  3. .
  4. .
  5. .
  6. DOMOVES PROC    NEAR
  7. ;
  8. ; THIS ROUTINE WILL TAKE THE PLACE OF ANY (REP MOVSW) PROCESS.
  9. ; BY CALLING THIS ROUTINE INSTEAD OF USING (REP MOVSW) INSTRUCTIONS, YOU
  10. ; WILL INCREASE THE SPEED OF MEMORY MOVING SIGNIFICANTLY ON 386 AND 486
  11. ; CPU BASED MACHINES.
  12. ;
  13. ; SINCE THIS IS A (REP MOVSW) REPLACEMENT IT STANDS TO REASON THAT ANY
  14. ; AND ALL REQUIREMENTS OF THE (REP MOVSW) INSTRUCTION ARE STILL
  15. ; REQUIRED.  FOR EXAMPLE:
  16. ;
  17. ;       DS:SI     POINTS TO SOURCE MEMORY
  18. ;       ES:DI     POINTS TO DESTINATION MEMORY
  19. ;       CX        NUMBER OF WORDS TO MOVE
  20. ;
  21.  
  22. ;
  23. ; SHOULD I DO 386 (32 BIT MOVES?)
  24. ;
  25.         CMP     DS:CPUTYPE,6    ;AM I ON A 386?
  26.         JZ      RPMX386B
  27.         REP     MOVSW           ;NO JUST DO REGULAR REPEAT WORD MOVES
  28.         JMP     NO386B          ;DONE
  29. RPMX386B:
  30. ;
  31. ; IF 386 THEN MOVE AS MANY DOUBLE WORD MULTIPLES AS YOU CAN THEN
  32. ; IF THERE WAS AN ODD NUMBER OF WORDS TO MOVE, FINISH OUT WITH
  33. ; A FINAL WORD MOVE.
  34. ;
  35.         SHR     CX,1            ;CX=HOW MANY DOUBLE WORDS TO MOVE
  36. .386                            ;TELLS TURBO ASSEMBLER TO USE 386 OPCODES
  37.         REP     MOVSD
  38. .8086                           ;SWITCHES BACK TO 8088-8086 OPCODES
  39.         JNC     NO386B          ;WAS THERE AN ODD NUMBER OF WORDS?
  40.         MOV     CX,1
  41.         REP     MOVSW           ;IF SO THEN FINISH OUT LAST MOVE
  42. NO386B:
  43.         RET
  44. DOMOVES ENDP
  45. .
  46. .
  47. .
  48. .***************** PROGRAM SECTION END ******************
  49.  
  50.